package com.it.you.base.map;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 * 测试hashmap的扩容机制
 */
public class HashMapTest3 {

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        //放入4个元素  4/0.75 + 1 = 6.3  测试设置4、6、7三种情况 会不会发生扩容
        //4 会发生扩容 6 、7不会 HashMap会转换成大于该capacity 的第一个2的幂作为容量
        Map<String, String> map = new HashMap<>(7);
        Class<?> mapType = map.getClass();
        Method capacity = mapType.getDeclaredMethod("capacity");
        capacity.setAccessible(true);

        map.put("1", "第一个元素插入");
        System.out.println("capacity : " + capacity.invoke(map) + "    size : " + map.size());
        map.put("2", "第二个元素插入");
        System.out.println("capacity : " + capacity.invoke(map) + "    size : " + map.size());
        map.put("3", "第三个元素插入");
        System.out.println("capacity : " + capacity.invoke(map) + "    size : " + map.size());
        //设置map的初始容量4  扩容阈值：4*0.75=3 当插入第4个元素的时候会进行扩容
        map.put("4", "第四个元素插入");
        System.out.println("capacity : " + capacity.invoke(map) + "    size : " + map.size());


    }
}
